Laravel提供了一個方便且好用的方式包裝資料,並提供一系列方法處理資料,方便你在處理業務邏輯的同時清楚描述你的程式在做什麼。
他實作了以下介面使得它具有更多的功能性,包含
ArrayAccess
Countable
IteratorAggregate
JsonSerializable
Arrayable
Jsonable
以下會整理一些我在官方文件上看到Collection使用方法及我可能會常使用的method。
$collection = collect([1, 2, 3]);
$collection = Collection::make([1, 2, 3]);
$collection = new Collect([1, 2, 3]);
我們可以利用macro方法,透過closure去達成延展功能。這例子是幫它添加一個toUpper方法
Collection::macro('toUpper', function () {
return $this->map(function ($value) {
return Str::upper($value);
});
});
$collection = collect(['first', 'second']);
$upper = $collection->toUpper();
他提供非常多的方法,我這邊簡單整理一些我在實務中有用過的一些方法
only可以將你的Collection篩選出你想要的key
$collection = collect([
'product_id' => 1,
'name' => 'Desk',
'price' => 100,
'discount' => false
]);
$filtered = $collection->only(['product_id', 'name']);
$filtered->all();
// ['product_id' => 1, 'name' => 'Desk']
$collection = collect(['taylor', 'abigail', null])->map(function ($name) {
return strtoupper($name);
});
$collection = collect([1, 2, 3, 4]);
$filtered = $collection->filter(function ($value, $key) {
return $value > 2;
});
$filtered->all();
等等,還有很多可以摸索的功能,我也沒有全部都用過,等到之後有需求時,再來翻翻。
再來我要介紹的是另一個Eloquent collection,Eloquent方法中回傳的是Illuminate\Database\Eloquent\Collection類的實例,他也繼承了基礎的collection,所以可以使用基礎collection的方法。
$names = User::all()->reject(function ($user) {
return $user->active === false;
})->map(function ($user) {
return $user->name;
});
不過有一點要注意的是絕大多數的方法在Eloquent collection中回傳是Eloquent collection,但有些方法他回傳的會是base collection,包括以下。
好~今天就看到這邊,明天再來看看其他有趣的功能吧!